
class EventEmeitter {
    constructor() {
        this._events = this._events || new Map(); // 储存事件 键值对
        this._maxListeners = this._maxListeners || 10; // 设立监听上限
    }
    // 触发
    emit(type, ...args) {
        const handler = this._events.get(type);
        // 从已有的事件中找当前触发的事件
        if(handler) {
            // apply允许我们将一个数组"解开"成为一个个的参数再传递给调用函数
            handler.apply(this, args)
        }
        
    }

    // 监听
    on(type, fn) {
        if(!this._events.get(type)) {
            this._events.set(type, fn)
        }
    }
    
    // 移除
    removeListener(type) {
        if(this._events.has(type)) {
            this._events.delete(type);
        }
    }
}

export default new EventEmeitter();